package ar.edu.utn.frsf.tpae.a2014.g01;

import java.util.ArrayList;

import java.util.List;

import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Cliente;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Estado;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Pedido;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Transportista;


public class PedidoMockDao implements ar.edu.utn.frsf.tpae.a2014.g01.dao.PedidoDAO{
	
	public List <Pedido> aux = new ArrayList <Pedido> ();

	private Pedido persistirPedido(Pedido pedido) {
		return pedido;
	}
	
	@Override
	public List<Pedido> buscarPedidos(Estado estado) {
		
		Pedido ped;
		
		switch(estado){
		
		case A_RETIRAR:
			aux.clear();
			for(int i=0;i<pedidosTotales.size();i++){
				ped=pedidosTotales.get(i);
				if(ped.getHistoriales().get(ped.getHistoriales().size()-1).getEstado()==Estado.A_RETIRAR)
					aux.add(ped);
			}
			
			return aux;
		
		case ACEPTADO:
			aux.clear();

			for(int i=0;i<pedidosTotales.size();i++){
				ped=pedidosTotales.get(i);
				if(ped.getHistoriales().get(ped.getHistoriales().size()-1).getEstado()==Estado.ACEPTADO)
					aux.add(ped);
			}
			
			return aux;
		
		case EN_TRANSPORTE:
			aux.clear();

			for(int i=0;i<pedidosTotales.size();i++){
				ped=pedidosTotales.get(i);
				if(ped.getHistoriales().get(ped.getHistoriales().size()-1).getEstado()==Estado.EN_TRANSPORTE)
					aux.add(ped);
			}
			
			return aux;

		case ENTREGADO:
			aux.clear();
			for(int i=0;i<pedidosTotales.size();i++){
				ped=pedidosTotales.get(i);
				if(ped.getHistoriales().get(ped.getHistoriales().size()-1).getEstado()==Estado.ENTREGADO)
					aux.add(ped);
			}
			
			return aux;
		
		default:
				return null;
				
		}
	}


	
	@Override
	public void eliminar(Pedido pedido) {
		//pedido debe estar manejado por hibernate
		for (int i = 0; i < pedidosTotales.size(); i++) {
			if(pedidosTotales.get(i).getId()==pedido.getId())
				pedidosTotales.remove(i);
		}
		return;
	}

	@Override
	public List<Pedido> buscarPedidosAsignados(Transportista transportista) {

		return transportista.getPedidosAsignados();
	}

	@Override
	public void crearPedido(Pedido pedido) {
		persistirPedido(pedido);
		pedidosTotales.add(pedido);
		
	}

	@Override
	public void actualizarPedido(Pedido pedido) {
		persistirPedido(pedido);
		
	}

	@Override
	public List<Pedido> buscarPedidosRealizados(Cliente cl) {
		List <Pedido> aux = new ArrayList <Pedido> ();
		Pedido ped;
		for(int i=0;i<pedidosTotales.size();i++){
			ped=pedidosTotales.get(i);
			if(ped.getCliente().getId()==cl.getId())
				aux.add(ped);
		}
		
		return aux;

	}

	@Override
	public void asignarPedidoaTransportista(Pedido pedido,Transportista transportista) {
		pedido.setTransportista(transportista);
		transportista.addPedidosAsignados(pedido);
		persistirPedido(pedido);

	}

	@Override
	public void actualizarEstadoOrden(Pedido pedido) {
		persistirPedido(pedido);

	}

}
